﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging;
using Windows.UI.Xaml.Navigation;

// The Basic Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234237

namespace StudyTime_1
{
    /// <summary>
    /// A basic page that provides characteristics common to most applications.
    /// </summary>
    /// 

    
    

    public sealed partial class Review1 : StudyTime_1.Common.LayoutAwarePage
    {
        private List<reviewClass> reviewListWork;
        private int currentItem = 0;
        private bool listCreated = false;


        public Review1()
        {
            this.InitializeComponent();
            
        }


          /// <summary>
        /// Populates the page with content passed during navigation.  Any saved state is also
        /// provided when recreating a page from a prior session.
        /// </summary>
        /// <param name="navigationParameter">The parameter value passed to
        /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested.
        /// </param>
        /// <param name="pageState">A dictionary of state preserved by this page during an earlier
        /// session.  This will be null the first time a page is visited.</param>
        protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
        {
        }

        /// <summary>
        /// Preserves state associated with this page in case the application is suspended or the
        /// page is discarded from the navigation cache.  Values must conform to the serialization
        /// requirements of <see cref="SuspensionManager.SessionState"/>.
        /// </summary>
        /// <param name="pageState">An empty dictionary to be populated with serializable state.</param>
        protected override void SaveState(Dictionary<String, Object> pageState)
        {
        }

        private void next_Click(object sender, RoutedEventArgs e)
        {
            next_Question();

        }

        private void last_Click(object sender, RoutedEventArgs e)
        {
            if (imgScroll.Visibility == Visibility.Visible)
            {
                imgScroll.Visibility = Visibility.Collapsed;
                imagebttn.Content = "Image";
            }
            if (listCreated == true)
            {
                if (currentItem <= 0)
                {
                    currentItem = -1;
                    questions.Text = "Press next to review.";
                    setImage(currentItem,true);
                }


                else if (currentItem <= reviewListWork.Count - 1 && currentItem > -1)
                {
                    currentItem--;
                    //questions.Text = quizList[currPage].question.ToString();
                    questions.Text = "Original Question:" + Environment.NewLine + reviewListWork[currentItem].origQuestion + Environment.NewLine + Environment.NewLine +
               "Your Answer: " + Environment.NewLine + reviewListWork[currentItem].yourAnswer + Environment.NewLine + Environment.NewLine + "Correct Answer:" + Environment.NewLine +
               reviewListWork[currentItem].actualAnswer;
                    setImage(currentItem,false);
                }
                     else if (currentItem == reviewListWork.Count)
                {
                    currentItem--;
                    //questions.Text = quizList[0].question.ToString();
                    questions.Text = "Original Question:" + Environment.NewLine + reviewListWork[currentItem].origQuestion + Environment.NewLine + Environment.NewLine +
               "Your Answer: " + Environment.NewLine + reviewListWork[currentItem].yourAnswer + Environment.NewLine + Environment.NewLine + "Correct Answer:" + Environment.NewLine +
               reviewListWork[currentItem].actualAnswer;
                    setImage(currentItem, false);
                }

                else
                {
                    //questions.Text = quizList[0].question.ToString();
                    questions.Text = "Original Question:" + Environment.NewLine + reviewListWork[currentItem].origQuestion + Environment.NewLine + Environment.NewLine +
               "Your Answer: " + Environment.NewLine + reviewListWork[currentItem].yourAnswer + Environment.NewLine + Environment.NewLine + "Correct Answer:" + Environment.NewLine +
               reviewListWork[currentItem].actualAnswer;
                    setImage(currentItem, false);
                }
            }
            else
            {
                errorBox.Text = "Please load a Quiz.";
            }
        }

        private void pageRoot_Loaded(object sender, RoutedEventArgs e)
        {
            if (imgScroll.Visibility == Visibility.Visible)
            {
                imgScroll.Visibility = Visibility.Collapsed;
                imagebttn.Content = "Image";
            }

            reviewListWork = App.reviewList;
            listCreated = true;

            questions.Text = "Original Question:" + Environment.NewLine + reviewListWork[currentItem].origQuestion + Environment.NewLine + Environment.NewLine +
                "Your Answer: " + Environment.NewLine + reviewListWork[currentItem].yourAnswer + Environment.NewLine + Environment.NewLine + "Correct Answer:" + Environment.NewLine +
                reviewListWork[currentItem].actualAnswer;
            setImage(currentItem, false);

        }

        private void next_Question()
        {
            if (imgScroll.Visibility == Visibility.Visible)
            {
                imgScroll.Visibility = Visibility.Collapsed;
                imagebttn.Content = "Image";
            }
             if (listCreated == true)
            {
                if (currentItem < reviewListWork.Count - 1)
                {
                    currentItem++;

                    questions.Text = "Original Question:" + Environment.NewLine + reviewListWork[currentItem].origQuestion + Environment.NewLine + Environment.NewLine +
               "Your Answer: " + Environment.NewLine + reviewListWork[currentItem].yourAnswer + Environment.NewLine + Environment.NewLine + "Correct Answer:" + Environment.NewLine +
               reviewListWork[currentItem].actualAnswer;
                    setImage(currentItem,false);
                   
                }
                else
                {
                    currentItem = reviewListWork.Count;
                    questions.Text = "Press previous to review.";
                    setImage(currentItem, true);
                }
            }
            else
            {
                errorBox.Text = "Please Select a Quiz.";
            }
        }



        async private void setImage(int image, bool end)
        {
           
            byte[] tmp = new byte[1];
            byte[] blank = new byte[1];

            if (end == false)
            {
                tmp = reviewListWork[image].picture;
            }
            else
            {
                blank = new byte[1];
            }

            BitmapImage tmpImg = new BitmapImage();

            var stream = new InMemoryRandomAccessStream();

            using (var writer = new DataWriter(stream))
            {
                if (end == false && tmp != null)
                {
                    writer.WriteBytes(tmp);
                    await writer.StoreAsync();
                    writer.DetachStream();
                    imagebttn.IsEnabled = true;
                }
                else
                {
                    writer.WriteBytes(blank);
                    await writer.StoreAsync();
                    writer.DetachStream();
                    imagebttn.IsEnabled = false;
                }
            }
            stream.Seek(0);
            tmpImg.SetSource(stream);

            quizImage.Source = tmpImg;
        }
        private void imagebttn_Click(object sender, RoutedEventArgs e)
        {

            if (imgScroll.Visibility == Visibility.Visible)
            {
                popoutSB.Begin();
                imgScroll.Visibility = Visibility.Collapsed;
                imagebttn.Content = "Image";

            }
            else
            {
                imgScroll.Visibility = Visibility.Visible;
                imagebttn.Content = "back";
                popinSB.Begin();
            }

        }
    }
}
